#!/usr/bin/python3
import os
import subprocess
import shutil
import optparse

#функция принимает из консоли аргументы
def get_argument():
    argument = optparse.OptionParser()
    argument.add_option('-p', '--path', dest='path', help='Путь до файла с результатом сканирования Router Scann')
    argument.add_option('-i', '--interface', dest='interface', help='Имя безпроводного интерфейса')
    argument.add_option('-m', '--mac', dest='mac', help='Сопоставить один mac-address и результат сканирования Router Scann')
    argument.add_option('-M', '--mac-list', dest='mac_list', help='Путь до файла с mac-адресами')
    #костыль!!!
    argument.add_option('-r', '--resalt-RS', dest='resalt_router_scann', action='store_const', const='all', help='Покажет результат работы Router Scann')
    
    #присваениие переменным значений флага и аргумента
    (options, arguments) = argument.parse_args()
    
    #проверка на ввод аргументов
    #ключи -p и обязателен
    if not options.path:
        argument.error('[!] Укажите путь до файла с результатами сканирования Router Scann, (этот параметр является обязательным')
    elif not options.path.endswith('.csv'):
        argument.error('[!] Формат файла должен быть .csv, который получен в результате работы Router Scann')
        
    elif options.resalt_router_scann:
        #чтение всего результата работы Router Scann
        with open(options.path, 'r') as resalt_rs:
            for line in resalt_rs:
                resalt = line.split(';')
                print('\n##########################################')
                print('Данные по маршрутизатору:' +
                        '\nVendor: ' + resalt[5].replace('"', '') + 
                        '\nIP: ' + resalt[0].replace('"', '') +
                        '\nPort: ' + resalt[1].replace('"', '') +
                        '\nLan IP: ' + resalt[13].replace('"', '') +
                        '\nAuthorization: ' + resalt[4].replace('"', '') +
                        '\n\nДанные по безпроводному подключению:' +
                        '\nBSSID: ' + resalt[8].replace('"', '') + 
                        '\nESSID: ' + resalt[9].replace('"', '') +
                        '\nKey: ' + resalt[11].replace('"', ''))
                print('##########################################')

    
    elif options.interface:
        #функция, принимает на фход интерфейс, запускает мониторинг
        #и возвращает список мак-адресов полученных в результате мониторинга
        mac_list_resalt_monitor = airodump_mon(options.interface)
        #функция принимает на вход путь до результата сканирования Router Scann
        #и результат мониторинга, или список мак-адресов, или мак-адрес
        search_matches(options.path, mac_list_resalt_monitor)
        
    elif options.mac:
        options.mac = str(options.mac.upper())
        #функция которая сравнивает один мак адрес
        search_matches(options.path, options.mac)
        
    elif options.mac_list:
        with open(options.mac_list) as mac_list:
            options.mac_list = []
            for mac_line in mac_list:
                mac_line = mac_line.strip()
                options.mac_list.append(mac_line.upper())
        
        #функция которая сравнивает список мак адресов
        search_matches(options.path, options.mac_list)
            
    return options
    
def search_matches(path_resalt_router_scann, mac):
    #читаем результат сканирования Router Scan
    with open(path_resalt_router_scann, 'r') as resalt:
        for mac_line_scann in resalt:
            res = mac_line_scann.split(';')
            resalt_reading_router_scann = res[8].replace('"', '')          

            #читаем результат airodump-ng/списка мак-адресов/мак-адрес
            if type(mac) == list:
                for resalt_mac_list in mac:
                    if resalt_reading_router_scann == resalt_mac_list:
                        print('\n[+] Есть пробитие')
                        print('ip: ' + res[0] + '\nauth: ' + res[4] + '\nESSID: ' + res[9] + '\nBSSID: ' + res[8] + '\nkey: ' + res[11]) 
            
            elif type(mac) == str:
                if mac == resalt_reading_router_scann:
                    print('\n[+] Есть пробитие')
                    print('ip: ' + res[0] + '\nauth: ' + res[4] + '\nESSID: ' + res[9] + '\nBSSID: ' + res[8] + '\nkey: ' + res[11])

        print('\n[!] Завершение работы! Если нет результатов, то совпадений не найдено')

def airodump_mon(interface):      
    if not os.path.exists('log'):
        os.mkdir('log')
        #перевод карточки в режим монитора
        os.system('airmon-ng start ' + interface)
        #запуск мониторинга, и сохранение результата во временный файл
        interface = interface + 'mon'
        os.system('airodump-ng ' + interface + ' -w log/resalt')
        
        #чтение результата мониторинга и добавление в список
        with open('log/resalt-01.csv', 'r') as resalt:
            mac_list_resalt_monitor = []
            for line in resalt:
                res_line = line.split(' ')
                mac_list_resalt_monitor.append(res_line[0].replace(',', ''))               
                        
            #после завершения работы скрипта удаляется каталог log
            #и карта переводится в рабочий режим
            os.system('airmon-ng stop ' + interface)
            shutil.rmtree('log')
            return mac_list_resalt_monitor

get_argument()


























